package com.algorithm.note01Sort;

import com.algorithm.note01Sort.entity.BiteEntity;
import com.algorithm.note01Sort.entity.SortEntity;
import org.junit.Test;

import java.util.Arrays;

public class Note01Test {

    SortEntity sortEntity = new SortEntity();
    BiteEntity biteEntity = new BiteEntity();

    @Test
    // 选择排序
    public void fun1(){
        int[] arr = {1, 12, 53, 422, 5454, 454, 42, 4, 22, 0, 0, 25, 12, 545};

        sortEntity.selectSort(arr);

        System.out.println(Arrays.toString(arr));
    }

    @Test
    // 冒泡排序
    public void fun2(){
        int[] arr = {1, 12, 53, 422, 5454, 454, 42, 4, 22, 0, 0, 25, 12, 545};

        sortEntity.bubbleSort(arr);

        System.out.println(Arrays.toString(arr));
    }

    @Test
    // 通过异或交换数组两个位置的数
    // 要求：交换位置的两个数内存空间中是两个不同的存储位置，否则会导致相同的数被置为 0！！！
    public void fun3(){
        int[] arr = {1, 12, 53, 422, 5454, 454, 42, 4, 22, 0, 0, 25, 12, 545};

        biteEntity.swapXOR(arr, 3, 0);
        biteEntity.swapXOR(arr, 1, 12);// 把两个不同位置的相同数互换位置
        biteEntity.swapXOR(arr, 2, 2);// 给互换位置的方法传入同一个位置，值归 0

        System.out.println(Arrays.toString(arr));
    }

    @Test
    // 通过位运算获取仅有一个数是奇数个的数组中对应的数
    public void fun4(){
        int[] arr = {1, 2, 1, 2, 3, 3, 3, 1, 1};
        int odd = biteEntity.getODD(arr);
        System.out.println(odd);
    }

    @Test
    // 通过位运算获取有两个数是奇数个的数组中对应的数
    public void fun5(){
        int[] arr = {1, 2, 1, 2, 3, 3, 3, 5, 5, 1, 1, 0, 0, 565656};

        int[] odds = biteEntity.getODDS(arr);

        System.out.println(Arrays.toString(odds));
    }

}
